package com.exmaple.deal;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.cloud.netflix.zuul.filters.discovery.PatternServiceRouteMapper;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableZuulProxy
public class MicroserviceDealGatewayZuulRatelimitURLApplication {
	public static void main(String[] args) {
		SpringApplication.run(MicroserviceDealGatewayZuulRatelimitURLApplication.class, args);
	}

	/**
	 * 该示例是将userservice-v1映射到/v1/uservice/中，常用于版本管理中，如APP端调用的API带有版本信息(服务-版本)，
	 * Zuul为这些不同版本的微服务应用生成以版本代号作为路由前缀定义的路由规则。
	 * 通过具有版本号前缀的URL路径，可以很容易通过路径表达式来归类和管理这些具有版本信息的微服务
	 * @return
	 */
	@Bean
	public PatternServiceRouteMapper serviceRouteMapper() {
		// 调用构造函数PatternServiceRouteMapper(String servicePattern, String
		// routePattern)
		// servicePattern指定微服务的正则
		// routePattern指定路由正则
		return new PatternServiceRouteMapper("(?<name>^.+)-(?<version>v.+$)", "${version}/${name}");
	}
}
